package com.zhiwen.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhiwen.domain.dto.AnswerDTO;
import com.zhiwen.domain.entity.Answer;
import com.zhiwen.domain.vo.AnswerVO;

/**
 * 回答服务接口
 */
public interface AnswerService extends IService<Answer> {

    /**
     * 创建回答
     */
    AnswerVO createAnswer(AnswerDTO answerDTO);

    /**
     * 更新回答
     */
    AnswerVO updateAnswer(AnswerDTO answerDTO);

    /**
     * 删除回答
     */
    void deleteAnswer(Long id);

    /**
     * 获取回答详情
     */
    AnswerVO getAnswerDetail(Long id);

    /**
     * 分页查询问题下的回答列表
     */
    Page<AnswerVO> getAnswerPage(Long questionId, Page<Answer> page);

    /**
     * 采纳回答
     */
    void acceptAnswer(Long id);

    /**
     * 点赞回答
     */
    void voteAnswer(Long id);

    /**
     * 取消点赞
     */
    void cancelVote(Long id);

    /**
     * 获取用户回答列表
     *
     * @param userId 用户ID
     * @param page 分页对象
     * @return 回答分页对象
     */
    Page<AnswerVO> getUserAnswers(Long userId, Page<Answer> page);

    /**
     * 获取所有回答列表（管理员使用）
     * 如果questionId不为空，则获取特定问题的回答
     * 如果questionId为空，则获取所有回答
     *
     * @param questionId 问题ID(可选)
     * @param page 分页对象
     * @return 回答分页对象
     */
    Page<AnswerVO> getAllAnswers(Long questionId, Page<Answer> page);
}
